iT邦幫忙

2024 iThome 鐵人賽

DAY 19
0
Python

進擊的Python系列 第 21

Day19-讀取陣列

  • 分享至 

  • xImage
  •  

因為...我喜歡你~里維兵長!

https://ithelp.ithome.com.tw/upload/images/20240823/20163257Upwk05tPcM.jpg
圖片來源:(https://forum.gamer.com.tw/Co.php?bsn=43473&sn=45361)

NumPy讀取陣列

索引(Indexing)

單一元素的存取

直接使用中括號,並指定要存取的索引值
索引值從 0 開始

import numpy as np
arr = np.array([1, 2, 3, 4, 5])
print(arr[2])  # 輸出:3

多維陣列的存取

使用逗號分隔不同維度的索引

arr2d = np.array([[1, 2, 3], [4, 5, 6]])
print(arr2d[1, 2])  # 輸出:6

切片(Slicing)

arr[start:stop:step]

start 起始索引(包含)
stop 結束索引(不包含)
step 步長
arr = np.arange(10)
print(arr[2:5])   # 輸出: [2 3 4]
print(arr[::2])    # 輸出: [0 2 4 6 8] (取偶數索引的元素)

布林值索引(Boolean Indexing)

  • 創建布林陣列:使用條件判斷產生一個與原陣列形狀相同的布林陣列
  • 使用布林陣列索引:將布林陣列作為索引,取出對應為 True 的元素
arr = np.array([1, 2, 3, 4, 5])
mask = arr > 3
print(arr[mask])  # 輸出: [4 5]

綜合範例

import numpy as np

# 創建一個二維陣列
arr = np.arange(25).reshape(5, 5)
print(arr)

輸出 [[ 0  1  2  3  4][ 5  6  7  8  9][10 11 12 13 14][15 16 17 18 19][20 21 22 23 24]]

# 索引第2行第3列的元素
print(arr[1, 2])

輸出 7

# 切片取出第2行到第4行,第1列到第3列的子陣列
print(arr[1:4, 0:3])

輸出
[[ 5  6  7]
 [10 11 12]
 [15 16 17]]

# 找出大於15的元素
mask = arr > 15
print(arr[mask])

輸出 [16 17 18 19 20 21 22 23 24]

# 將大於15的元素替換為0
arr[mask] = 0
print(arr)

輸出
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]
 [15  0  0  0  0]
 [ 0  0  0  0  0]]

注意事項

  • 索引從 0 開始
  • 切片時,結束索引是不包含的
  • 布林索引的形狀必須與原陣列相同
  • 修改切片或布林索引得到的陣列會直接修改原陣列,如果要避免修改原陣列,可以先複製一份

從檔案讀取

# 從 CSV 檔案讀取
data = np.loadtxt('data.csv', delimiter=',')

常用函數

  • np.loadtxt():讀取由空格或其他分隔符分隔的ASCII文本數據
  • np.genfromtxt():功能比 np.loadtxt()更強大,可以處理缺失值、不同數據類型等更複雜的情況
  • np.load():讀取以 .npy 格式保存的Numpy二進位檔案。
  • np.fromfile():從二進位檔案中讀取數據

1.從文本文件讀取

np.loadtxt()

import numpy as np

data = np.loadtxt('data.txt', delimiter=',')  # 以逗號分隔

np.genfromtxt()

data = np.genfromtxt('data.csv', delimiter=',', skip_header=1, missing_values='NA', filling_values=0)

2.從 CSV 文件讀取

pandas.read_csv()

Pandas 是另一個強大的數據分析庫,其 read_csv() 函數專門用於讀取 CSV 文件,並返回一個 DataFrame 對象

import pandas as pd

df = pd.read_csv('data.csv')
data = df.values  # 將 DataFrame 轉換為 Numpy 陣列

3.從二進位文件讀取

np.load()

讀取 Numpy 之前保存的 .npy 或 .npz 文件

data = np.load('data.npy')

4.從其他格式讀取

  • scipy.io.loadmat():讀取 MATLAB 的 .mat 文件
  • h5py:讀取 HDF5 格式的文件

重要參數

delimiter 指定分隔符
skiprows 跳過指定行數
usecols 指定要讀取的列
dtype 指定數據類型
missing_values 指定缺失值的表示方式
filling_values 填充缺失值

從 CSV 文件讀取數據

import numpy as np

# 讀取 CSV 文件,以逗號分隔,跳過第一行,將缺失值填充為0
data = np.genfromtxt('sales_data.csv', delimiter=',', skip_header=1, filling_values=0)

# 顯示讀取的數據
print(data)

上一篇
Day19-NumPy(佩托拉)
下一篇
Day20-迭代陣列與項目賦值
系列文
進擊的Python36
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言